package com.example.leetcode.c1_c100.c24;


/**
 * 给定一个链表，两两交换其中相邻的节点，并返回交换后的链表。
 *
 * 你不能只是单纯的改变节点内部的值，而是需要实际的进行节点交换。
 *
 *  
 *
 * 示例:
 *
 * 给定 1->2->3->4, 你应该返回 2->1->4->3.
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/swap-nodes-in-pairs
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

import com.example.leetcode.common.ListNode;
import com.example.leetcode.common.ListOperate;

/**
 * 两两交换链表中的节点
 * @author zhanpengguo
 * @date 2020-09-09 11:46
 */
public class Solution {

    public static void main(String[] args) {
        ListNode listNode = ListOperate.create(new int[]{1, 2, 3, 4});
        Solution solution = new Solution();
        ListNode listNode1 = solution.swapPairs(listNode);
        while (listNode1 != null) {
            System.out.println(listNode1.val);
            listNode1 = listNode1.next;
        }
    }

    public ListNode swapPairs(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode second = head.next;
        // 交换
        head.next = swapPairs(second.next);
        second.next = head;
        return second;
    }
}
